//
// Created by HP on 2024/4/14.
//

#ifndef AURORA_ST_COMMON_COMM_FOC_DEFINE_H
#define AURORA_ST_COMMON_COMM_FOC_DEFINE_H
#ifdef __cplusplus
extern "C" {
#endif

#include "common_thread_define.h"
#include "main.h"

//-------------------COMM 发送 FOC ------------------------
// 通信 向 FOC 发送 类型
typedef enum Aurora_COMM2FOC_TYPE{
    COMM2FOC_NONE = 0,
    commenable_LMCalibration,           //左电机校准
    commenable_RMCalibration,           //右电机校准
    commenable_LRMCalibration,          //左右电机校准
    HALT_LEFT_MOTOR,                   //暂停左电机
    HALT_RIGHT_MOTOR,                   //暂停右电机
    HALT_BOTH_MOTOR ,                   //暂停左右电机

    LEFT_MOTOR,                         //操作左电机
    RIGHT_MOTOR,                        //操作右电机
    BOTH_MOTOR,                         //操作左右电机

    SET_UqUd,                           //设置UqUd
    SET_WAVEMAXMIN,                     //设置波形的最大最小值

    SET_I_PARAM,                        //设置电流环参数
    SET_SPEED_PARAM,                    //设置速度环参数
    SET_POSITION_PARAM,                    //设置速度环参数
}Aurora_COMM2FOC_TYPE;

typedef enum Aurora_COMM2FOC_MODE{
    OPEN_MODE = 0,    //开环
    I_MODE,           //电流
    SPEED_MODE,       //速度
    POSITION_MODE,    //位置

    LUqUd,
    RUqUd,

    LTaTbTc_MAXMIN,
    LIaIbIc_MAXMIN,
    LIqId_MAXMIN,
    LIalphaIbeta_MAXMIN,


    RTaTbTc_MAXMIN,
    RIaIbIc_MAXMIN,
    RIqId_MAXMIN,
    RIalphaIbeta_MAXMIN,

    LI_AIM,
    LI_Qpi,
    LI_Dpi,
    RI_AIM,
    RI_Qpi,
    RI_Dpi,

    LSPEED_AIM,
    LSPEED_PI,
    RSPEED_AIM,
    RSPEED_PI,

    LPOSITION_AIM,
    LPOSITION_PI,
    RPOSITION_AIM,
    RPOSITION_PI,

}Aurora_COMM2FOC_MODE;


typedef struct Aurora_COMM2FOC_PID_PARM{
    float AIM;
    float P;
    float I;
    float D;
}Aurora_COMM2FOC_PID_PARM;

//通信 向 FOC 发送 信息
struct Aurora_COMM2FOC_MSG{
    Aurora_CMD             cmd;
    Aurora_COMM2FOC_TYPE   type;        //操作类型
    Aurora_COMM2FOC_MODE   mode;        //操作模式
    float                  Uq;
    float                  Ud;
    float                  wave_max;
    float                  wave_min;
    Aurora_COMM2FOC_PID_PARM   pid_parm;  //pid参数

};
//-------------------  ------------------------


//-------------------FOC 发送 COMM ------------------------
typedef enum Aurora_FOC2COMM_TYPE{
    foc2comm_wave_data = 0,
}Aurora_FOC2COMM_TYPE;

typedef struct Aurora_FOC2COMM_WaveData{
    float data1;
    float data2;
    float data3;
    float data4;
}Aurora_FOC2COMM_WaveData;

struct Aurora_FOC2COMM_MSG{
    Aurora_CMD             cmd;
    Aurora_FOC2COMM_TYPE   type;
    Aurora_FOC2COMM_WaveData waveData;
};


//-------------------  ------------------------
#ifdef __cplusplus
}
#endif //AURORA_ST_COMMON_COMM_FOC_DEFINE_H
#endif